package ar.edu.unrn.lia.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;

@Entity
@Table(name = "cuidad")
public class Ciudad extends BaseEntity implements Serializable {

	private static final long serialVersionUID = 6667293934207987614L;

	private String descripcion;

	private String departamento;

	private Provincia provincia;

	private Integer cp;

	private List<Barrio> barrios = new ArrayList<Barrio>(0);

	public Ciudad() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Ciudad(String descripcion, String departamento, Provincia provincia,
			Integer cp) {
		super();
		this.descripcion = descripcion;
		this.departamento = departamento;
		this.provincia = provincia;
		this.cp = cp;
	}

	@NotNull(message = "{name.notnull}")
	@Column(name = "descripcion", nullable = false)
	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	@OneToMany(cascade = CascadeType.ALL, mappedBy = "ciudad", fetch = FetchType.LAZY)
	public List<Barrio> getBarrios() {
		return barrios;
	}

	public void setBarrios(List<Barrio> barrios) {
		this.barrios = barrios;
	}

	@NotNull(message = "{name.notnull}")
	public String getDepartamento() {
		return departamento;
	}

	public void setDepartamento(String departamento) {
		this.departamento = departamento;
	}

	@NotNull(message = "{name.notnull}")
	@ManyToOne(optional = false, fetch = FetchType.EAGER)
	@JoinColumn(name = "provincia_id", referencedColumnName = "id")
	public Provincia getProvincia() {
		return provincia;
	}

	public void setProvincia(Provincia provincia) {
		this.provincia = provincia;
	}

	@NotNull(message = "{name.notnull}")
	public Integer getCp() {
		return cp;
	}

	public void setCp(Integer cp) {
		this.cp = cp;
	}

}
